一篇由 AI 生成的文章

什么是词法分析?

词法分析是编译原理中一个重要的部分,也叫做 字面翻译(Literal Translation),用于把源程序中的单词转换成 形式化语言(formal languages) 中的有效单词。词法分析的目的是把输入的字符流分割成有意义的词素(Token),构成一个 词法单元(Lexical Unit),这个分析过程称为词法分析。

词法分析是编译器的一个重要过程,它的输入是一个符号流(以字符的形式),输出是拆分成有意义的词素,可以对符号流施加上语义上的约束,可以有效的检测出程序中出现的语法错误等。

词法分析的基本概念

词法分析的基本概念是由标记,记号,字符和词素组成的。

  • 标记(tag) 是识别一类特殊标记的函数,如一个空格,一个分号,等等。

  • 记号(symbol) 指一系列字符的集合,比如一个字母,一个关键字,一个标识符等。

  • 字符(character) 指原始的符号,比如英文字母abc、数字123等等。

  • 词素(Token) 是源程序中的一个有意义的词,比如变量名、关键字等等。 词法分析器就是把源程序中每一个字符重新组合成有意义的词素。

例子

下面这段源程序代码:


//计算2+2的和

#include<stdio.h>

int main() {

int result=2+2;

printf(“2+2=%d\n”,result);

return 0;

}

它的词法分析结果如下:

Token 含义
#include 关键字
标识符
int 关键字
main 标识符
( ) 操作符
{ } 操作符
int 关键字
result 标识符
= 操作符
2 数字常量
+ 操作符
2 数字常量
; 操作符
printf 标识符
( ) 运算符
“,result” 字符串常量
; 操作符
return 关键字
0 数字常量
; 操作符
} 操作符

我们再看一段示例代码。


//A sample C program

#include <stdio.h>

int main(void) {

printf("Hello world!\n");

return 0;

}

它的分析过程如下:

  1. 首先使用注释忽略第一行;
  2. 第二行的include是一个关键字,表明要引入外部代码;
  3. 第三行的int是一个关键字,表示main函数的返回类型;
  4. "main"是一个标识符,表示函数的名称;
  5. "("和")"分别是一个界定符,标识main函数的开始和结束;
  6. "printf"是一个标识符,表示调用函数;
  7. "("和")"分别是一个界定符,标识调用函数的开始和结束;
  8. "'Hello world!\n'"是一个字符串,表示要输出的内容;
  9. "return 0"是一个关键字,表示函数的返回值。

由此可见,词法分析就是把有意义的单词进行分离,从而将源代码中的抽象概念抽象成具体的有意义的单词,使得编译器可以处理和理解它们,并为程序准备好解释和执行步骤。

本文由 AI 生成。

Copyright © qingeneral.github.io 2023 all right reserved,powered by Gitbook该文章修订时间: 2023-05-28 13:25:06

results matching ""

    No results matching ""